package com.ustropo.financas;

import java.io.Serializable;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * 
 * @author Fernando C. de Souza
 * @version 1.0
 * @since 25/10/2013
 */
public class FinancasSQLHelper extends SQLiteOpenHelper implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -6025241736883732130L;
	
	
	/* variaveis */
	private static final String BANCO = "ustropofinancas.db";
	private static final int BANCO_VERSAO = 1;
	
	/* criacao das tabelas */
	private static final String CRIA_TABELA_CONTAS = "create table " + 
		IFinancasBancoConstantes.TABELA_CONTAS + "(" + 
		IFinancasBancoConstantes.CONTAS_ID + " integer primary key autoincrement, " +
		IFinancasBancoConstantes.CONTAS_NOME + " text not null);";
	
	private static final String CRIA_TABELA_CATEGORIA = "create table " + 
			IFinancasBancoConstantes.TABELA_CATEGORIAS + "(" + 
			IFinancasBancoConstantes.CATEGORIAS_ID + " integer primary key autoincrement, " +
			IFinancasBancoConstantes.CATEGORIAS_GRUPO + " integer REFERENCES " + 
					IFinancasBancoConstantes.TABELA_GRUPOS + " (" + IFinancasBancoConstantes.GRUPO_ID + ")," +
			IFinancasBancoConstantes.CATEGORIAS_NOME + " text not null);";
	
	private static final String CRIA_TABELA_GRUPO = "create table " + 
			IFinancasBancoConstantes.TABELA_GRUPOS + "(" + 
			IFinancasBancoConstantes.GRUPO_ID + " integer primary key autoincrement, " +
			IFinancasBancoConstantes.GRUPO_NOME + " text not null);";
	
	private static final String CRIA_TABELA_DESPESAS = "create table " + 
		IFinancasBancoConstantes.TABELA_DESPESAS + "(" +
		IFinancasBancoConstantes.DESPESAS_ID + " integer primary key autoincrement, " +
		IFinancasBancoConstantes.DESPESAS_DATA + " date not null, " +
		IFinancasBancoConstantes.DESPESAS_VALOR + " double not null, " +
		IFinancasBancoConstantes.DESPESAS_CATEGORIA + " integer REFERENCES " + 
					IFinancasBancoConstantes.TABELA_CATEGORIAS + " (" + IFinancasBancoConstantes.CATEGORIAS_ID + ")," +
		IFinancasBancoConstantes.DESPESAS_CONTA + " integer REFERENCES " + 
					IFinancasBancoConstantes.TABELA_CONTAS + " (" + IFinancasBancoConstantes.CONTAS_ID + ")," +
		IFinancasBancoConstantes.DESPESAS_DESCRICAO + " text);";
	
	private static final String CRIA_TABELA_RECEITAS = "create table " + 
			IFinancasBancoConstantes.TABELA_RECEITAS + "(" +
			IFinancasBancoConstantes.RECEITAS_ID + " integer primary key autoincrement, " +
			IFinancasBancoConstantes.RECEITAS_DATA + " date not null, " +
			IFinancasBancoConstantes.RECEITAS_VALOR + " double not null, " +
			IFinancasBancoConstantes.RECEITAS_CATEGORIA + " integer REFERENCES " + 
						IFinancasBancoConstantes.TABELA_CATEGORIAS + " (" + IFinancasBancoConstantes.CATEGORIAS_ID + ")," +
			IFinancasBancoConstantes.RECEITAS_CONTA + " integer REFERENCES " + 
						IFinancasBancoConstantes.TABELA_CONTAS + " (" + IFinancasBancoConstantes.CONTAS_ID + ")," +
			IFinancasBancoConstantes.RECEITAS_DESCRICAO + " text);";
	
	private static final String CRIA_TABELA_TRANSFERENCIAS = "create table " + 
			IFinancasBancoConstantes.TABELA_TRANSFERENCIAS + "(" +
			IFinancasBancoConstantes.TRANSFERENCIAS_ID + " integer primary key autoincrement, " +
			IFinancasBancoConstantes.TRANSFERENCIAS_DATA + " date not null, " +
			IFinancasBancoConstantes.TRANSFERENCIAS_VALOR + " double not null, " +
			IFinancasBancoConstantes.TRANSFERENCIAS_ORIGEM + " integer not null REFERENCES " + 
						IFinancasBancoConstantes.TABELA_CONTAS + " (" + IFinancasBancoConstantes.CONTAS_ID + ")," +
			IFinancasBancoConstantes.TRANSFERENCIAS_DESTINO + " integer not null REFERENCES " + 
						IFinancasBancoConstantes.TABELA_CONTAS + " (" + IFinancasBancoConstantes.CONTAS_ID + ")," +
			IFinancasBancoConstantes.TRANSFERENCIAS_DESCRICAO + " text);";
	
	//====================================================================================================================
	
	/**
	 * Cria uma nova classe para gerenciamento do banco de dados.
	 * 
	 * Deve ser única na aplicação!
	 * 
	 * @param context
	 */
	public FinancasSQLHelper(Context context) {
		super(context, BANCO, null, BANCO_VERSAO);
	}

	/*
	 * (non-Javadoc)
	 * @see android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase)
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL(CRIA_TABELA_GRUPO);
		db.execSQL(CRIA_TABELA_CATEGORIA);
		db.execSQL(CRIA_TABELA_CONTAS);
		db.execSQL(CRIA_TABELA_DESPESAS);
		db.execSQL(CRIA_TABELA_RECEITAS);
		db.execSQL(CRIA_TABELA_TRANSFERENCIAS);
	}

	/*
	 * (non-Javadoc)
	 * @see android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite.SQLiteDatabase, int, int)
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		db.execSQL("DROP TABLE IF EXISTS " + IFinancasBancoConstantes.TABELA_TRANSFERENCIAS);
		db.execSQL("DROP TABLE IF EXISTS " + IFinancasBancoConstantes.TABELA_RECEITAS);
		db.execSQL("DROP TABLE IF EXISTS " + IFinancasBancoConstantes.TABELA_DESPESAS);
		db.execSQL("DROP TABLE IF EXISTS " + IFinancasBancoConstantes.TABELA_CONTAS);
		db.execSQL("DROP TABLE IF EXISTS " + IFinancasBancoConstantes.TABELA_CATEGORIAS);
		db.execSQL("DROP TABLE IF EXISTS " + IFinancasBancoConstantes.TABELA_GRUPOS);
		
		onCreate(db);
	}

}
